#include <iostream>
#include <queue>

// 两个队列实现一个栈
// 两个队列只有一个队列有数据
class MyStack
{
public:
    MyStack() {}
    void Push(int value)
    {
        // 谁不为空，往谁里面塞数据
        if(q1.empty() == false)
            q1.push(value);
        else
            q2.push(value);
    }

    void Pop()
    {
        if(q1.empty() == false)
        {
            while(q1.size() != 1)
            {
                q2.push(q1.front());
                q1.pop();
            }
            q1.pop();
        }
        else
        {
            while(q2.size() != 1)
            {
                q1.push(q2.front());
                q2.pop();
            }
            q2.pop();
        }
    }

    int GetTop()
    {
        int result = 0;
        if(q1.empty() == false)
        {
            while(q1.size() != 1)
            {
                q2.push(q1.front());
                q1.pop();
            }
            // q1是空的，q2是满的（要保证始终只有一个队列有东西，只有在拿的时候才会是一个）
            result = q1.front();
            q2.push(result);
            q1.pop();
            return result;
        }
        else
        {
            while(q2.size() != 1)
            {
                q1.push(q2.front());
                q2.pop();
            }
            result = q2.front();
            q1.push(result);
            q2.pop();
            return result;
        }
    }

private:
    std::queue<int> q1;
    std::queue<int> q2;
};

int main()
{
    MyStack s;
    s.Push(10);
    s.Push(20);
    s.Push(30);
    s.Push(40);
    std::cout << s.GetTop() << std::endl;
    s.Push(50);
    std::cout << s.GetTop() << std::endl;
    
    return 0;
}
